export interface TableRecordType {
  [key: string | number]: any
}

//
export interface TableColumn {
  key: string
  title: string
  [key: string]: any
}

// 表格配置类型
export interface TableOptionsType {
  addBtn?: boolean //是否显示添加按钮
  removeBtn?: boolean //是否显示删除按钮
  customize?: boolean // 是否显示表头右侧自定义选项栏
  index?: boolean // 是否显示序号
  border?: boolean //是否展示外边框和列边框	boolean	false
  loading?: boolean //页面是否加载中	boolean|object	false
  pagination?: boolean //分页器
  defaultExpandAllRows?: boolean //初始时，是否展开所有行	boolean	false
  defaultExpandedRowKeys?: TableRecordType //默认展开的行	string[]
  indentSize?: number // 缩进
  rowSelection?: boolean //是否显示多选 配置多选该Ctable 组件上接收如下事件
}

export interface RowSelectionType {
  onChange?: (selectedRowKeys: (string | number)[], selectedRows: Array<any>) => void //onChange
  onSelect?: (record: TableRecordType, selected: boolean, selectedRows: Array<any>) => void //onSelect
  onSelectAll?: (selected: boolean, selectedRows: Array<any>, changeRows: Array<any>) => void //全选
}

// 表头配置类型
export interface TableColumnType {
  title: string //列标题 必传
  key: string //列字段 必传
  ellipsis?: boolean //超出省略号 非必传
  align?: 'left' | 'right' | 'center' //文本对其  非必传
  width?: number //列宽度
  edit?: boolean //是否可编辑 非必传 当可编辑的时候 不能传递点击事件 不会自定义渲染标签 不会渲染操作按钮
  click?: (text: number | string, record: TableRecordType) => void //点击事件 非必传
  render?: (...args: (number | string)[]) => string //自定义渲染标签 非必传
  group?: {
    //操作栏 非必传
    type?: 'danger' | 'default' //按钮类型非必传 默认 default
    text: string //按钮文本 必传
    key: string //按钮唯一的key 必传
    click?: (record: TableRecordType, index: number | string) => void //按钮点击事件 非必传
    popconfirm?: boolean //是否需要确认提示
  }[]
  [key: string]: any //这里可以继续配置 antd a-table 组件表头的其他配置
}

// 滚动条类型
export interface TableScrollType {
  x?: number
  y?: number
}

// 模态框配置类型
export interface TableCrudConfigType {
  cancelText?: string //取消按钮文字
  okText?: string //确认按钮文字
  okType?: string //确认按钮类型
  title?: string //标题
  width?: string | number //宽度
  closable?: boolean //是否显示右上角的关闭按钮
  maskClosable?: boolean //是否显示右上角的关闭按钮
  labelAlignh?: string // 'right'  'left' | 'right'
  labelCol?: TableRecordType // { style: { width: '80px' } }  输入框左边文字的宽度
  layout?: string // 'horizontal'|'vertical'|'inline'  文字在输入框的左边 | 上边
}

export type TableCrudItemComponentType = 'a-input' | 'a-select' | 'a-tree-select' | 'a-radio-group' | 'a-checkbox-group' | 'a-textarea'

// options类型
interface TableCrudItemOptionType {
  value: string | number
  label: string | number
  [key: string]: any
}

// 表单配置类型
export interface TableCrudItemType {
  label: string //名称
  key: string // 字段
  type: TableCrudItemComponentType // 组件类型（暂时满足这些，之后补充）
  disabled?: boolean // 是否禁用
  eventName?: string // 事件名称
  span?: string | number // 布局  { span: 24 }   一行放一个
  placeholder?: string
  options?: TableCrudItemOptionType[] // 下拉框数组 | 多选框数组
  rules?: any[] // 校验规则
  [key: string]: any
}
